package com.tripcube.system.service;

import com.tripcube.system.domain.SysUserFollows;
import com.tripcube.system.domain.vo.UserSimpleVO;

import java.util.List;
import java.util.Set;

/**
* @author alander
* @description 用户关注关系表Service
* @createDate 2025-09-24 21:54:56
*/
public interface SysUserFollowsService {

    /**
     * 关注用户
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 是否关注成功
     */
    boolean follow(Long followerId, Long followedId);

    /**
     * 取消关注
     * @param followerId 关注者ID
     * @param followedId 被关注者ID
     * @return 是否取消成功
     */
    boolean unfollow(Long followerId, Long followedId);

    /**
     * 获取我关注的人ID集合
     * @param followerId 关注者ID
     * @return 关注的人ID集合
     */
    Set<Long> getFollowedIds(Long followerId);

    /**
     * 获取我的粉丝ID集合
     * @param followedId 被关注者ID
     * @return 粉丝ID集合
     */
    Set<Long> getFollowerIds(Long followedId);

    /**
     * 判断双方是否互相关注
     * @param uid1 用户1 ID
     * @param uid2 用户2 ID
     * @return 是否互相关注
     */
    boolean isFollowEach(Long uid1, Long uid2);

    /**
     * 获取关注数
     * @param followerId 关注者ID
     * @return 关注数量
     */
    Long countFollowed(Long followerId);

    /**
     * 获取粉丝数
     * @param followedId 被关注者ID
     * @return 粉丝数量
     */
    Long countFollower(Long followedId);

    /**
     * 获取共同关注的人
     * @param uid1 用户1 ID
     * @param uid2 用户2 ID
     * @param limit 限制数量
     * @return 共同关注的人列表
     */
    List<UserSimpleVO> commonFollows(Long uid1, Long uid2, int limit);

    /**
     * 查询用户关注关系列表
     * 
     * @param follows 用户关注关系信息
     * @return 用户关注关系集合信息
     */
    java.util.List<SysUserFollows> selectUserFollowsList(SysUserFollows follows);

    /**
     * 通过关注关系ID查询关注关系
     * 
     * @param id 关注关系ID
     * @return 关注关系对象
     */
    SysUserFollows selectUserFollowsById(Long id);

    /**
     * 新增用户关注关系
     * 
     * @param follows 用户关注关系信息
     * @return 结果
     */
    int insertUserFollows(SysUserFollows follows);

    /**
     * 修改用户关注关系
     * 
     * @param follows 用户关注关系信息
     * @return 结果
     */
    int updateUserFollows(SysUserFollows follows);

    /**
     * 批量删除用户关注关系信息
     * 
     * @param ids 需要删除的关注关系ID
     * @return 结果
     */
    int deleteUserFollowsByIds(Long[] ids);

    /**
     * 删除用户关注关系信息
     * 
     * @param id 关注关系ID
     * @return 结果
     */
    int deleteUserFollowsById(Long id);
}
